package com.samxfan;

public class RunApp {
    public static void main(String[] args) {
        Fruit apple = new Fruit("Apple", 8.0);
        Fruit strawberry = new Fruit("Strawberry", 13.0);
        Fruit mango = new Fruit("Mango", 20.0);

//        1、有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。
//        现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
//        请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
        ShoppingCart cart1 = new ShoppingCart();
        cart1.addItem(apple, 1);
        cart1.addItem(strawberry, 2);
        System.out.println("场景1 商品总价 " + cart1.calculateTotal()); // 期望 34.0元

//        2、超市增加了一种水果芒果，其定价为 20 元/斤。
//        现在顾客 B 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
//        请编写函数，对于 B 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
        ShoppingCart cart2 = new ShoppingCart();
        cart2.addItem(apple, 3);
        cart2.addItem(strawberry, 4);
        cart2.addItem(mango, 5);
        cart2.calculateTotal();
        System.out.println("场景2 商品总价 " + cart2.calculateTotal());   // 期望 176.0元

//        3、超市做促销活动，草莓限时打 8 折。
//        现在顾客 C 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
//        请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
        Fruit discountedStrawberry = new Fruit("Strawberry", 13.0);
        discountedStrawberry.setDiscount(0.8);

        ShoppingCart cart3 = new ShoppingCart();
        cart3.addItem(apple, 3);
        cart3.addItem(discountedStrawberry, 4);
        cart3.addItem(mango, 5);
        System.out.println("场景3 商品总价 " + cart3.calculateTotal());  // 期望 165.6元

//        4、促销活动效果明显，超市继续加大促销力度，购物满 100 减 10 块。
//        现在顾客 D 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
//        请编写函数，对于 D 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
        Fruit discountedStrawberry2 = new Fruit("Strawberry", 13.0);
        discountedStrawberry2.setDiscount(0.8);

        ShoppingCart cart4 = new ShoppingCart();
        cart4.addItem(apple, 3);
        cart4.addItem(discountedStrawberry2, 4);
        cart4.addItem(mango, 5);

        cart4.setSpendXSaveYPromotion(100, 10);
        System.out.println("场景4 商品总价 " + cart4.calculateTotal());  // 期望 155.6元

        // 需在程序中，验证函数计算结果的正确性。
        // 引入 junit 单元测试 使用断言进行正确性严重
        // 比如场景1 assertEquals(new Double("34.0"), cart1.calculateTotal());
        // 比如场景2 assertEquals(new Double("176.0"), cart2.calculateTotal());
        // 比如场景3 assertEquals(new Double("165.6"), cart3.calculateTotal());
        // 比如场景4 assertEquals(new Double("155.6.0"), cart4.calculateTotal());

    }
}
